﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AudiPyme.DAL;

namespace AudiPyme.BLL
{
    //Clase para formatear las relaciones tipo activo - vulnerabilidad de las matrices en las tablas de la interfaz
    public class TipActVulnTabla
    {
        int idTipoActivo;
        String tipoActivo;
        int idVulnerabilidad;
        String vulnerabilidad;

        public int IdTipoActivo
        {
            get { return idTipoActivo; }
            set { idTipoActivo = value; }
        }
        public String TipoActivo
        {
            get { return tipoActivo; }
            set { tipoActivo = value; }
        }

        public int IdVulnerabilidad
        {
            get { return idVulnerabilidad; }
            set { idVulnerabilidad = value; }
        }

        public String Vulnerabilidad
        {
            get { return vulnerabilidad; }
            set { vulnerabilidad = value; }
        }

        public TipActVulnTabla()
        {
            idTipoActivo = 0;
            tipoActivo = "";
            idVulnerabilidad = 0;
            vulnerabilidad = "";
        }

        public TipActVulnTabla(int IdTipoActivo, String TipoActivo, int IdVulnerabilidad, String Vulnerabilidad)
        {
            idTipoActivo = IdTipoActivo;
            tipoActivo = TipoActivo;
            idVulnerabilidad = IdVulnerabilidad;
            vulnerabilidad = Vulnerabilidad;
        }

        public static List<TipActVulnTabla> RelacionesTipActVuln()
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TipActVulnTabla> LRelaciones = new List<TipActVulnTabla>();
            IQueryable<TipActVulnTabla> relaciones = (from m in agenteBD.Matriz_TiposActivosVulnerabilidadesEstablecer
                                                      join t in agenteBD.TiposActivosEstablecer on m.IdTipoActivo equals t.IdTipoActivo
                                                      join v in agenteBD.VulnerabilidadesEstablecer on m.IdVulnerabilidad equals v.IdVulnerabilidad
                                                      where m.Actual == true
                                                      select new TipActVulnTabla { IdTipoActivo = m.IdTipoActivo, TipoActivo = t.TipoActivo, IdVulnerabilidad = m.IdVulnerabilidad, Vulnerabilidad = v.Vulnerabilidad }).Distinct().OrderBy(i => i.IdTipoActivo).ThenBy(v => v.IdVulnerabilidad);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        public static List<TipActVulnTabla> RelacionesTipActVulnEliminadas()
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TipActVulnTabla> LRelaciones = new List<TipActVulnTabla>();
            IQueryable<TipActVulnTabla> relaciones = (from m in agenteBD.Matriz_TiposActivosVulnerabilidadesEstablecer
                                                      join t in agenteBD.TiposActivosEstablecer on m.IdTipoActivo equals t.IdTipoActivo
                                                      join v in agenteBD.VulnerabilidadesEstablecer on m.IdVulnerabilidad equals v.IdVulnerabilidad
                                                      where m.Actual == false
                                                      select new TipActVulnTabla { IdTipoActivo = m.IdTipoActivo, TipoActivo = t.TipoActivo, IdVulnerabilidad = m.IdVulnerabilidad, Vulnerabilidad = v.Vulnerabilidad }).Distinct().OrderBy(i => i.IdTipoActivo).ThenBy(v => v.IdVulnerabilidad);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        public static List<TipActVulnTabla> RelacionesTipActVulnPorTipoActivo(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TipActVulnTabla> LRelaciones = new List<TipActVulnTabla>();
            IQueryable<TipActVulnTabla> relaciones = (from m in agenteBD.Matriz_TiposActivosVulnerabilidadesEstablecer
                                                      join t in agenteBD.TiposActivosEstablecer on m.IdTipoActivo equals t.IdTipoActivo
                                                      join v in agenteBD.VulnerabilidadesEstablecer on m.IdVulnerabilidad equals v.IdVulnerabilidad
                                                      where t.TipoActivo.Contains(TextoBuscar) && m.Actual == true
                                                      select new TipActVulnTabla { IdTipoActivo = m.IdTipoActivo, TipoActivo = t.TipoActivo, IdVulnerabilidad = m.IdVulnerabilidad, Vulnerabilidad = v.Vulnerabilidad }).Distinct().OrderBy(i => i.IdTipoActivo).ThenBy(v => v.IdVulnerabilidad);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        public static List<TipActVulnTabla> RelacionesTipActVulnEliminadasPorTipoActivo(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TipActVulnTabla> LRelaciones = new List<TipActVulnTabla>();
            IQueryable<TipActVulnTabla> relaciones = (from m in agenteBD.Matriz_TiposActivosVulnerabilidadesEstablecer
                                                      join t in agenteBD.TiposActivosEstablecer on m.IdTipoActivo equals t.IdTipoActivo
                                                      join v in agenteBD.VulnerabilidadesEstablecer on m.IdVulnerabilidad equals v.IdVulnerabilidad
                                                      where t.TipoActivo.Contains(TextoBuscar) && m.Actual == false
                                                      select new TipActVulnTabla { IdTipoActivo = m.IdTipoActivo, TipoActivo = t.TipoActivo, IdVulnerabilidad = m.IdVulnerabilidad, Vulnerabilidad = v.Vulnerabilidad }).Distinct().OrderBy(i => i.IdTipoActivo).ThenBy(v => v.IdVulnerabilidad);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }



        public static List<TipActVulnTabla> RelacionesTipActVulnPorVulnerabilidad(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TipActVulnTabla> LRelaciones = new List<TipActVulnTabla>();
            IQueryable<TipActVulnTabla> relaciones = (from m in agenteBD.Matriz_TiposActivosVulnerabilidadesEstablecer
                                                      join t in agenteBD.TiposActivosEstablecer on m.IdTipoActivo equals t.IdTipoActivo
                                                      join v in agenteBD.VulnerabilidadesEstablecer on m.IdVulnerabilidad equals v.IdVulnerabilidad
                                                      where v.Vulnerabilidad.Contains(TextoBuscar) && m.Actual == true
                                                      select new TipActVulnTabla { IdTipoActivo = m.IdTipoActivo, TipoActivo = t.TipoActivo, IdVulnerabilidad = m.IdVulnerabilidad, Vulnerabilidad = v.Vulnerabilidad }).Distinct().OrderBy(i => i.IdTipoActivo).ThenBy(v => v.IdVulnerabilidad);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        public static List<TipActVulnTabla> RelacionesTipActVulnEliminadasPorVulnerabilidad(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TipActVulnTabla> LRelaciones = new List<TipActVulnTabla>();
            IQueryable<TipActVulnTabla> relaciones = (from m in agenteBD.Matriz_TiposActivosVulnerabilidadesEstablecer
                                                      join t in agenteBD.TiposActivosEstablecer on m.IdTipoActivo equals t.IdTipoActivo
                                                      join v in agenteBD.VulnerabilidadesEstablecer on m.IdVulnerabilidad equals v.IdVulnerabilidad
                                                      where v.Vulnerabilidad.Contains(TextoBuscar) && m.Actual == false
                                                      select new TipActVulnTabla { IdTipoActivo = m.IdTipoActivo, TipoActivo = t.TipoActivo, IdVulnerabilidad = m.IdVulnerabilidad, Vulnerabilidad = v.Vulnerabilidad }).Distinct().OrderBy(i => i.IdTipoActivo).ThenBy(v => v.IdVulnerabilidad);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }
    }
}
